#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#define MAX_S 200 
#define MAX_C 100
#define MAX_SC 500 
struct Student
{
	int sno; 
	char sname[20]; 
	char gender[3];
	char nation[10]; 
	int age;
}; 
struct Course
{
	int cno;
	char cname[20]; 
	float credit; 
}; 
struct SC 
{
	int sno; 
	int cno; 
	int grade; 
};
struct Sort
{
	int sno;
	char sname[20];
	float num;
};
struct Count
{
	float credit;
	int num;
};
Student* s = (Student *)malloc(sizeof(Student )*MAX_S); 
Course* c = (Course *)malloc(sizeof(Course )*MAX_C); 
SC* sc = (SC *)malloc(sizeof(SC )*MAX_SC); 
int s_len=0; 
int c_len=0;
int sc_len=0;
void menu1(); 
void writeFile(FILE* ,FILE* ,FILE* ,Student*,int,Course*,int ,SC*,int);
int readFileS(FILE* ,Student* );
int readFileC(FILE* ,Course* );
int readFileSC(FILE* ,SC* );
void input(Student*);
int inputAll(Student*,int);
int inputAllCourse(Course*,int);
int inputAllSC (Student *, int, Course *, int, SC*,int );
int checkSno(Student *, int , int varSno); 
int checkCno(Course *, int , int varCno);
void menu2(); 
void output(Student*); 
int outputAll(Student*,int);
int countByGender(Student*,int,char*);
double averageAge(Student*,int);
void sortBySno(Student*,int);
int searchBySno(Student*,int,int);
int deleteBySno(Student*,int,int);
int* countByAge(Student*,int);
char* countByNation(Student*,int);  
void menu3();  
void outputCourse ( Course* ,int); 
int outputAllCourse( Course* , int );  
void sortByCno(Course* , int );
int searchByCno(Course* , int, int); 
void* countByCredit(Course*, int );  
void menu4(); 
int outputAllSC1(Student *, int, Course *, int, SC*,int); 
void searchGrade(SC *, int, Student *, int, Course *, int, char*, char* );
void searchByCno1(SC *, int,Course * , int, int);
void searchBySno1(SC *, int, Student *, int, int);
void sortByAverageGrade(SC *, int, Student *, int);
void menu5(); 
int searchBySno(Student*,int,int);
int deleteBySno(Student*,int,int);
int deleteByCno2(Course*,int,int);
int deleteBySno3(SC*,int,int);
 
char filename1[20]="Student.dat";  
FILE* fp1=fopen(filename1,"ab");  
	
char filename2[20]="Course.dat";  
FILE* fp2=fopen(filename2,"ab");  
	 
char filename3[20]="SC.dat";  
FILE* fp3=fopen(filename3,"ab");

int main(void)
{ 
    
	 while(1)
	 {
		system("cls"); 
		printf("|\n\t\t\t 教学管理软件"); 
		printf("|\n\t\t-------------------------------------"); 
		printf("|\n\t\t\t 1--输入学生个人信息及成绩"); 
		printf("|\n\t\t\t 2--查询学生个人信息及成绩");
		printf("|\n\t\t\t 3--单科学习成绩录入");
		printf("|\n\t\t\t 4--查询学生的不及格科目情况和成绩"); 
		printf("|\n\t\t\t 5--学生数据更新 (删除与修改)"); 
		printf("|\n\t\t\t 0--退出");
		printf("|\n\t\t-------------------------------------"); 
		printf("\n\t\t\t 请选择(0 - 5)："); 
		int option; 
		scanf("%d",&option);
		fflush(stdin); 
		if(option==0)
		{ 
			writeFile(fp1,fp2,fp3,s,s_len,c,c_len,sc,sc_len);
			printf("数据已保存到文件");
			fclose(fp1); 
			fclose(fp2); 
			fclose(fp3); 
			free(s);
			free(c);
			free(sc); 
			return 0; 
		}
		 
		 if(option==1)
		{ 
		 menu1();
		} 
		if(option==2)
		{
		 menu2(); 
		}
		if(option==3)
		{
		 menu3(); 
		}
		if(option==4)
		{
		 menu4();
		} 
		if(option==5)
		{
		 menu5();
		} 
	 } 
}
void writeFile(FILE* fp1,FILE* fp2,FILE* fp3,Student* p1,
             int n1,Course* p2,int n2,SC* p3,int n3)
{ 
    for(int i=0; i<n1; i++) 
    {
    	fwrite(p1+i,sizeof(Student),1,fp1); 
	}
	for(int j=0; j<n2; j++)
	{
		fwrite(p2+j,sizeof(Course),1,fp2); 
	} 
	for(int k=0; k<n3; k++) 
	{
		fwrite(p3+k,sizeof(SC),1,fp3);
	}
    return;
}
int readFileS(FILE* fp,Student* p)
{   
    int i=0;
 	while(1)
	{
 	    fread(p+i,sizeof(Student),1,fp);
	    if(feof(fp)) 
		break;  
	    i++; 
	} 
    return i; 
}
int readFileC(FILE* fp,Course* p)
{   
    int i=0;
 	while(1)
	{
 	    fread(p+i,sizeof(Course),1,fp);
	    if(feof(fp)) 
		break;  
	    i++; 
	} 
    return i; 
}
int readFileSC(FILE* fp,SC* p)
{   
    int i=0;
 	while(1)
	{
 	    fread(p+i,sizeof(SC),1,fp);
	    if(feof(fp)) 
		break;  
	    i++; 
	}  
    return i; 
}
void menu1()
{
	while(1)
	 {
		system("cls"); 
		printf("\n\t\t 数据输入功能"); 
		printf("\n\t\t--------------------"); 
		printf("\n\t\t 1--增加学生成绩数据");
		printf("\n\t\t 2--增加学生科目数据");
		printf("\n\t\t 3--查询学生成绩数据"); 
		printf("\n\t\t 4--读取文件数据"); 
		printf("\n\t\t 0--返回上级菜单");
		printf("\n\t\t--------------------");
		printf("\n\t\t 请选择(0 - 3)："); 
		int option; 
		scanf("%d",&option);
		fflush(stdin); 
		if(option==0)
		{ 
		    return; 
		} 
		 if(option==1)
		{ 
		    s_len=inputAll(s,s_len); 
		} 
		 if(option==2)
		{
		    c_len=inputAllCourse(c,c_len);
		}
		 if(option==3)
		{
		 	sc_len=inputAllSC(s,s_len,c,c_len,sc,sc_len);
		}
		if(option==4)
		{
			fp1=fopen(filename1,"rb");
			fp2=fopen(filename2,"rb");
			fp3=fopen(filename3,"rb");
			s_len=readFileS(fp1,s);
			c_len=readFileC(fp2,c);
			sc_len=readFileSC(fp3,sc);
		}
	} 
} 
void input(Student* p) 
{ 
	printf("\n\t 学号：");scanf("%d",&(p->sno)); 
	fflush(stdin); 
	printf("\t 姓名：");gets(p->sname);
	printf("\t 性别："); fgets(p->gender,3,stdin);
	fflush(stdin); 
	printf("\t 学科："); gets(p->nation);
	printf("\t 该学科成绩："); scanf("%d",&(p->age));
	fflush(stdin); 
	return; 
}
int  inputAll(Student* a,int i)
{
    while(1)
    {
    	printf("输入学号为0结束\n"); 
    	printf("学号：");
	   	scanf("%d",&a[i].sno);
	   	if(a[i].sno!=0)
	   	{
	   		printf("名字：");
	  	getchar();
	    gets(a[i].sname);
	    printf("性别(男为F女为M)：");
	    scanf("%s",a[i].gender);
	    while(strcmp("F",a[i].gender)!=0 && strcmp("M",a[i].gender)!=0 )
    	{
    		printf("性别(男为F女为M)：");
	        scanf("%s",a[i].gender);
		}
	    printf("学科：");
	   	getchar();
	    gets(a[i].nation);
	    printf("该学科成绩：");
	   	scanf("%d",&a[i].age);
	   	printf("\n");
	   	i++;
		}
		else
		{
			break;
		}
	}
   	return i;
} 
int inputAllCourse(Course* c,int i)
{
{
	while(1)
    {
    	printf("\n输入成绩为0结束"); 
    	printf("\n成绩：");
	   	scanf("%d",&c[i].cno);
	   	if(c[i].cno!=0)
	   	{
	   		printf("成绩：");
		  	getchar();
		    gets(c[i].cname);
		    printf("学分：");
		   	scanf("%f",&c[i].credit);
		   	printf("\n");
		   	i++;
		}
		else
		{
			break;
		}
	}
   	return i;
}
}	
int inputAllSC (Student *s, int s_len, Course *c, int c_len, SC *sc , int i)
{
	int t1;
	int t2;
	while(1)
    {
    	printf("\n输入学号为0结束"); 
    	printf("\n学号：");
	   	scanf("%d",&sc[i].sno);
	   	if(sc[i].sno!=0)
	   	{
	   		printf("学号：");
		    scanf("%d",&sc[i].cno);
		    printf("成绩：");
		   	scanf("%d",&sc[i].grade);
		   	t1=checkSno(s,s_len,sc[i].sno);
		   	t2=checkCno(c,c_len ,sc[i].cno);
		   	printf("\n");
		   	if(t1==1 && t2==1)
		   	{
		   		printf("查询成功！");
		   		i++;	
			}
			if(t1==0 )
			{
				printf("学生成绩录入失败\n"); 
				printf("该学生不存在\n");
			}
			if(t2==0)
			{
				printf("学生成绩查询失败\n"); 
				printf("该成绩不存在\n");
			}
		   	
		}
		else
		{
			break;
		}
	}
	return i;
}
int checkSno(Student *s, int m, int varSno)
{
	int t=0;
	for(int i=0;i<m;i++)
	{
		if(s[i].sno==varSno)
		{
			t=1;
		}
	}
	return t;
}
int checkCno(Course *c, int n, int varCno)
{
	int t=0;
	for(int i=0;i<n;i++)
	{
		if(c[i].cno==varCno)
		{
			t=1;
		}
	}
	return t;
}
void menu2()
{
	while(1)
	{
	system("cls"); 
	printf("\n\t\t 学生数据查询功能");
	printf("\n\t--------------------------------------");
	printf("\n\t\t 1--显示所有学生"); 
	printf("\n\t\t 2--按班级统计学生人数");
	printf("\n\t\t 3--求学生学习科目");
	printf("\n\t\t 4--按成绩排序");
	printf("\n\t\t 5--按成绩查询学生"); 
	printf("\n\t\t 6--科目对应人数统计表");
	printf("\n\t\t 7--总成绩对应人数统计表");
	printf("\n\t\t 0--返回上级菜单");
	printf("\n\t---------------------------------------");
	printf("\n\t\t 请选择(0 - 7)："); 
	int option; 
	scanf("%d",&option);
	fflush(stdin); 
	if(option==0)
	{
		return;
	} 
	 
	if(option==1)
	{
		int count= outputAll(s,s_len);
		printf("\n\t\t 共%d 名学生\n",count);
	} 
	if(option==2)
	{ 
	    char varGender[3];
		gets(varGender);
	    int count=countByGender(s,s_len,varGender);
	    printf("%s有%d个",varGender,count);
	}
	 if(option==3)
	 { 
	    double avg=averageAge(s,s_len);
	    printf("%lf",avg);
	 }
	 if(option==4)
	{ 
	    sortBySno(s,s_len);
	    outputAll(s,s_len);
	}
	if(option==5)
	{ 
	    int varSno;
	    scanf("%d",&varSno);
	    int j=searchBySno(s,s_len,varSno); 
		if(j==-1)
	    printf("未找到");
	    else
	    output(s+j);
	} 
	 if(option==6)
	 {  
	  	int* p=(int*)malloc(sizeof(int)*1000);
	  	p= countByAge(s,s_len);
	 	{
	 		for(int i=0;i<1000;i++)
			{
				if(p[i]>0)
				{
					for(int j=0;j<s_len;j++)
					{
						if(s[j].age==i)
						{
					    	printf("%d岁---%d\n",i,p[i]);
							break;
						}
					}
			
				}				
			}
	 	}
	 	free(p); 
	 } 
	 if(option==7)
	 { 
	      int t=0;
		char* p=(char*)malloc(sizeof(char)*1000);
		p=countByNation(s,s_len);
		for(int i=0;i<s_len;i++)
		{			
		    if(i==0)
				{
					printf("%s科目有%d人\n",s[i].nation,p[i]);
				}
			else
				{
					for(int j=0;j<i;j++)
					{
						if(strcmp(s[i].nation,s[j].nation)==0)
						{
								t=1;
								break;
						}
						else
						{
								t=2;
						}
					}
						if(t==2)
						{
							printf("%s科目有%d人\n",s[i].nation,p[i]);
						}
					}
				
				}
		free(p);
	 } 
	system("pause"); 
	 } 
} 
void output(Student* p)
{ 
	 printf("\n\t 学号：%-10d",p->sno);
	 printf("姓名：%-15s",p->sname);
	 printf("性别：%-4s",p->gender);
	 printf("科目：%-10s",p->nation);
	 printf("成绩：%-3d\t",p->age);
	 return; 
}
int outputAll(Student* s,int s_len)
{ 
	    int count=0;
	    for(int i=0;i<s_len;i++)
		{
			output(s+i);
			count++; 
		} 
	    return count;
}
int countByGender(Student* s,int n,char* varGender)
{
	int cout=0;
	for(int i=0;i<n;i++)
	{
		if(strcmp(varGender,s[i].gender)==0)
		{
			cout++;
		}
	} 
	return cout;
}
double averageAge(Student* s,int n)
{
	if(n==0)   return 0.0; 
	float sum=0.0;
    float count=0;
    for(int i=0;i<n; i++)
	 {
            sum=sum+s[i].age;
			count++; 
	 }
	 float avg=sum/count;
	 return avg;
}
void sortBySno(Student* s,int n)
{
	Student stu;
	for(int i=0;i<n;i++) 
	{
	   	for(int j=i;j<n;j++) 
		   { 
		    if(s[i].sno>s[j].sno)
		       {
		           stu=s[i];
		           s[i]=s[j];
		           s[j]=stu;
		       } 
	       }
	}
	return;
}
int* countByAge(Student* s,int n)
{
	int* a=(int*)calloc(1000,sizeof(int));
	for(int i=0;i<n;i++)
	{
	    a[s[i].age]++; 
	}
	return a;
}
char* countByNation(Student* s,int n)
{
	char* brr=(char*)calloc(1000,sizeof(char));
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(strcmp(s[i].nation,s[j].nation)==0)
			brr[i]++;
		}      
    }
    return brr;
}
void menu3()
{
	while(1)
	 {
		 system("cls"); 
		 printf("\n\t\t 查询课程数据功能");
		 printf("\n\t\t--------------------------"); 
		 printf("\n\t\t 1--显示学生总成绩"); 
		 printf("\n\t\t 2--按单科成绩排序");
		 printf("\n\t\t 3--按班级查询成绩"); 
		 printf("\n\t\t 4-学号对应成绩统计表");
		 printf("\n\t\t 0--返回上级菜单");
		 printf("\n\t\t--------------------------");
		 printf("\n\t\t 请选择(0 - 4)："); 
		 int option; 
		 scanf("%d",&option);
		 fflush(stdin); 
		 if(option==0) return; 
		 if(option==1)
		{ 
		    outputAllCourse(c,c_len);
		} 
		 if(option==2)
		{ 
		    sortByCno(c,c_len);
			outputAllCourse(c,c_len);
		}
		 if(option==3)
		 { 
			int cno1,j;
			scanf("%d",&cno1);
			j=searchByCno(c,c_len,cno1);
			if(j==-1)
			printf("没有此学生成绩");
			if(j!=-1)
			outputCourse(c,j);
		 }
		if(option==4)
		{
			int t=0;
			Count* p=(Count*)malloc(sizeof(Count)*MAX_C);
			p=(Count*)countByCredit(c,c_len);
			for(int i=0;i<c_len;i++)
			{
				if(i==0)
				{
		           printf("\t\t%f学号有%d门\n",p[i].credit,p[i].num);			
				}				
				else
					{
						for(int j=0;j<i;j++)
						{
						if(p[i].credit==p[j].credit)
							{
									t=1;
									break;
							}
							else
							{
									t=2;
							}
						}
						if(t==2)
						{
							printf("\t\t%f学号有%d门\n",p[i].credit,p[i].num);
						}
					}
			}
			free(p);
		}
		system("pause");
	 } 
}
void outputCourse ( Course* c,int b)
{   
    printf("\t学号 \t学名 \t学分\n");
	printf("\t%d \t%s \t%f",c[b].cno,c[b].cname,c[b].credit);
}
void sortByCno(Course* c, int n)
{
	Course s;
	for(int i=0;i<n;i++)
	for(int j=i;j<n;j++)
	{
		if(c[i].cno>c[j].cno)
		{
			s=c[i];
			c[i]=c[j];
			c[j]=s;
		}
	}
	return;
}
int searchByCno(Course *c, int n,int cno1)
{
	for(int i=0;i<n;i++)
	{
		if(c[i].cno==cno1)
		return i;
		else
		return -1;
	}
}
int outputAllCourse(Course* c, int n)
{
	printf("\t学号 \t学名 \t学分\n");
	for(int i=0;i<n;i++)
	{
		
	    printf("\t%d \t%s \t%f \n",c[i].cno,c[i].cname,c[i].credit);
	}
}
void* countByCredit(Course *a, int m)
{
	Count* aa = (Count *)malloc(sizeof(Count)*MAX_C);;
	for(int i=0;i<m;i++)
	{
		aa[i].credit=a[i].credit;
		aa[i].num=1;
	}
	for(int j=0;j<m;j++)
	{
		for(int k=j+1;k<m;k++)
		{
			if(aa[j].credit==aa[k].credit)
			{
				aa[j].num++;
			}
		}
	}
    return aa;
} 
void menu4()
{
	while(1)
	 {
		system("cls"); 
		printf("\n\t\t 学生总成绩及单科成绩查询功能");
		printf("\n\t\t--------------------------------");
		printf("\n\t\t 1--输出所有学生成绩数据"); 
		printf("\n\t\t 2--查询某学生选某课程的成绩");
		printf("\n\t\t 3--查询某课程学生成绩排名明细情况");
		printf("\n\t\t 4--查询所有科目不及格超过2门的情况");
		printf("\n\t\t 5--按学生总成绩输出排行榜"); 
		printf("\n\t\t 0--返回上级菜单");
		printf("\n\t\t--------------------------------");
		printf("\n\t\t 请选择(0 - 5)："); 
		int option; 
		scanf("%d",&option);
		fflush(stdin); 
		if(option==0)
		{
			 return;
		} 
		if(option==1)
		{
		    int count=outputAllSC1(s, s_len,c,c_len,sc,sc_len);
			printf("\n\t\t 共%d 个科目成绩\n",count);
			printf("\n");
		} 
		if(option==2)
		{ 
		    char a1[10];
			char a2[10];
			printf("\n输入姓名："); 
			gets(a1);
			
			printf("\n输入学号：");
			gets(a2);
			
			searchGrade(sc, sc_len, s,s_len,c,c_len, a1, a2 );
		}
		 if(option==3)
		 { 
		    int id;
			printf("输入要查询的学号");
			scanf("%d",&id);
			searchByCno1(sc,sc_len, c,c_len, id);
		 }
		 if(option==4)
		 {
		 	int id;
			printf("输入要查询的学号");
			scanf("%d",&id);
			searchBySno1(sc,sc_len, s ,s_len, id);
		 }
		 if(option==5)
		 {
		    sortByAverageGrade(sc,sc_len, s,s_len); 
		 } 
		system("pause"); 
	 } 
}
int outputAllSC1(Student* s, int n1,Course *c, int n2, SC * sc, int n3)
{
	printf("\n    -----------------------------------------------------------------------");
	printf("\n     学号\t\t姓名\t\t学号\t\t班级名\t\t成绩\n");
	for(int i=0;i<n3;i++)
	{
		printf("\t%d",sc[i].sno);
		for(int j=0;j<n1;j++)
		{
			
			if(sc[i].sno==s[j].sno)
			{
				printf("\t\t%s",s[j].sname);
			}
		}
		printf("\t\t%d",sc[i].cno);
		for(int k=0;k<n2;k++)
		{ 
			if(sc[i].cno==c[k].cno)
			{
				printf("\t\t%s",c[k].cname);
			}
		}
		printf("\t\t%d\n",sc[i].grade);
		printf("    -----------------------------------------------------------------------\n");
	}
	return n3; 
}
void searchByCno1(SC *asc, int n3, Course *ac, int n2, int varCno)
{
	int n=0; 
	int t=-1;
    for (int i = 0; i < n3; i++)
    {
    	if (asc[i].cno==varCno)
        {
        	t=i;
    	}
    }
	if(t!=-1)
	{
		float num=0;
		float avg=0;
		for(int j=0;j<n3;j++)
		{
			if(asc[j].cno==varCno)
			{
				num=num+asc[j].grade;
				n++;
			}
		}
		if(num==0)
		{
			avg=0;
		}
		else
		{
			avg=num/n;
		}
		printf("该科目的总成绩为:%f\n",num);
		printf("该科目平均成绩为:%f\n",avg); 
	}
	else
	{
		printf("课程不存在");
	}
}
void searchBySno1(SC *asc, int n3, Student *as, int n1, int varSno)
{
	int n=0; 
	int t=-1;
    for (int i = 0; i < n3; i++)
    {
    	if (asc[i].sno==varSno)
        {
        	t=i;
    	}
    }
	if(t!=-1)
	{
		float num=0;
		float avg=0;
		for(int j=0;j<n3;j++)
		{
			if(asc[j].sno==varSno)
			{
				num=num+asc[j].grade;
				n++;
			}
		}
		if(num==0)
		{
			avg=0;
		}
		if(num!=0)
		{
			avg=num/n;
		}
		printf("该学生的总成绩为:%f\n",num);
		printf("该学生平均成绩为:%f\n",avg); 
	}
	if(t==-1)
	{
		printf("学生不存在");
	}
}
void sortByAverageGrade(SC *asc, int n3, Student *as, int n1)
{
	Sort* ss= (Sort *)malloc(sizeof(Sort )*10000);;
	for(int i=0;i<n3;i++)
	{
		ss[i].sno=asc[i].sno;
		ss[i].num=asc[i].grade;
		for(int j=i+1;j<n3;j++)
		{
			if(ss[i].sno==asc[j].sno)
			{
				ss[i].num=ss[i].num+asc[j].grade;
			}
		}
		for(int k=0;k<n1;k++)
		{
			if(ss[i].sno==as[k].sno)
			{
				strcpy(ss[i].sname,as[k].sname);
			}
		}
	}
    Sort temp;
	for(int ii=0;ii<n3;ii++)
	{
		for(int jj=ii+1;jj<n3;jj++)
		{
			if(ss[ii].num<ss[jj].num)
			{
					temp=ss[ii];
					ss[ii]=ss[jj];
					ss[jj]=temp;
			}
		}
				
	} 
	int t=0;
	printf("\t\t学号\t\t姓名\t\t总成绩\n");
	for(int e=0;e<n3;e++)
	{
		if(e==0)
		{
			printf("\t\t%d\t\t%s\t\t%f\n",ss[e].sno,ss[e].sname,ss[e].num);
		}
		else
		{
			for(int j=0;j<e;j++)
			{
				if(ss[e].sno==ss[j].sno)
				{
					t=1;
					break;
				}
				else
				{
					t=2;
				}
			}
			if(t==2)
			{
				printf("\t\t%d\t\t%s\t\t%f\n",ss[e].sno,ss[e].sname,ss[e].num);
			}
		}
	}
	free(ss);
}
void searchGrade(SC *asc, int n3, Student *as, int n1, Course *ac, int n2, char* str1, char* str2 )
{
	int t1=0;
	int t2=0;
	int t3=0;
	for(int i=0;i<n1;i++)
	{
		if(strcmp(as[i].sname,str1)==0)
		{
			t1=as[i].sno;
		}
	} 
	if(t1==0)
	{
		printf("不存在该学生\n");
		return ;
	}
	
	for(int j=0;j<n2;j++)
	{
		if(strcmp(ac[j].cname,str2)==0)
		{
			t2=ac[j].cno;
		}
	} 
	if(t2==0)
	{
		printf("不存在该科目成绩\n");
		return;
	}
	for(int k=0;k<n3;k++)
	{
		if(asc[k].sno==t1)
		{
			for(int l=0;l<n3;l++)
			{
				if(asc[l].cno==t2)
				{
					printf("\n%s的%s成绩为%d\n",str1,str2,asc[l].grade);
					return;
				}
				else
				{
					t3=1;
				}
			}
		}
		else
		{
			t3=2;
		}
	}
	if(t3==1)
	{
		printf("该学生未选择此科目");
	}
	if(t3==2)
	{
		printf("该学生未进行考试，无成绩数据");
	}
}
void menu5()
{
	while(1)
	 {
		 system("cls"); 
		 printf("\n\t\t 学生数据查询功能");
		printf("\n\t--------------------------------------");
		printf("\n\t\t 1--删除某学生成绩(从学生表)"); 
		printf("\n\t\t 2--删除某学生科目(从班级课程表)");
		printf("\n\t\t 3--删除某学生");
		printf("\n\t\t 0--返回上级菜单");
		printf("\n\t---------------------------------------");
		 printf("\n\t\t 请选择(0 - 3)："); 
		int option; 
		 scanf("%d",&option);
		 fflush(stdin); 
		if(option==0)
		{
			 return;
		} 
		if(option==1)
		{
			 printf("\n\t 待删除学号："); 
			 int varSno;
			 scanf("%d",&varSno);
			 int m =deleteBySno(s,s_len,varSno);
			 if(m!=-1)
			 {
			  printf("\n\t 学号：%d 已删除\n",varSno);
			  s_len=m;
			 }
			 else 
			 printf("\n\t 学号：%d 不存在\n",varSno);
		 } 
		 if(option==2)
		{
		    int cno2,j;
			scanf("%d",&cno2);
			j=searchByCno(c,c_len,cno2);
			if(j==-1)
			printf("没有此课程");
			if(j!=-1)
			{
				deleteByCno2(c,c_len,cno2);
				printf("已删除");
				c_len--;
			} 
		}
		 if(option==3)
		{
		    int s2;
		    printf("请输入需要删除学生的学号：\n");
		    scanf("%d",&s2);
		    
			int m =deleteBySno3(sc,sc_len, s2);
			if (m!= sc_len-1) 
			printf("未找到该学生！\n");
		    if (m == sc_len-1 )
		    {
		        printf("删除成功！\n");
		        sc_len=m;
		    }
			sc_len= outputAllSC1(s,s_len,c,c_len, sc,sc_len); 
		} 
		system("pause"); 
	 } 
} 
int deleteBySno(Student* s,int n,int varSno)
{
	int i=searchBySno(s,n,varSno);
	if(i==-1)
	 return -1;
	for(int j=0;j<n-i-1;j++) 
	{
		s[i+j]=s[i+j+1];
	} 
	return n-1; 
}
int searchBySno(Student* s,int n,int varSno)
{
	for(int i=0;i<n;i++)
	{
		if(s[i].sno==varSno) 
		return i; 
	} 
	return -1;
}
int  deleteBySno3(SC *asc, int n3, int varSno)
{
	int flag;
    flag = 0;
    for (int i = 0; i < n3; i++)
    {
        if (asc[i].sno==varSno)
        {
            flag = 1;
            for (int j = i; j < n3 - 1; j++)
            {
                asc[j] = asc[j + 1];
            }
        }
        if (flag == 1) break;
    }
    if(flag == 1) n3--;
    return n3;
}
int deleteByCno2(Course *c, int n, int cno2)
{
	Course s;
    for(int i=0;i<n;i++)
	{
		int k=-1;
		if(c[i].cno==cno2)
		{
			c[i]=c[i+1];
			k=i;
		}
		if(i>k&&i<n)
		{
			c[i]=c[i+1];
		}
	}	
}
